package com.l2device.gameserver.handler.voicedcommandhandlers;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.logging.Logger;

import com.l2device.gameserver.Config;
import com.l2device.gameserver.L2DatabaseFactory;
import com.l2device.gameserver.cache.HtmCache;
import com.l2device.gameserver.handler.IVoicedCommandHandler;
import com.l2device.gameserver.handler.admincommandhandlers.AdminPremium;
import com.l2device.gameserver.model.L2World;
import com.l2device.gameserver.model.actor.instance.L2PcInstance;
import com.l2device.gameserver.network.serverpackets.MagicSkillUse;
import com.l2device.gameserver.network.serverpackets.NpcHtmlMessage;
import com.l2device.gameserver.templates.StatsSet;

public class Menu implements IVoicedCommandHandler
{
		private static final String[] VOICED_COMMANDS = { "menu", "mod_menu_" };
		String str = "";
		protected StatsSet _StateSet;
		
		private static final String UPDATE_PREMIUMSERVICE = "UPDATE account_premium SET premium_service=?,enddate=? WHERE account_name=?"; 
		private static final Logger _log = Logger.getLogger(AdminPremium.class.getName());

		public boolean useVoicedCommand(String command, L2PcInstance player, String target)
		{
    		if (command.equalsIgnoreCase("menu"))
    		{
    			showHtm(player);
    		}

			else if (command.startsWith("mod_menu_"))
    		{
       			String addcmd = command.substring(9).trim();
       			
       			if (addcmd.startsWith("exp"))
      			{
         			int flag = Integer.parseInt(addcmd.substring(3).trim());
         			if (flag == 0)
        			{
         				player.setStopExp(true);
         				player.sendMessage("Получение опыта отключено. Помни! Для отмытия кармы нужен опыт!");
        			}
        			else
        			{
        				player.setStopExp(false);
        				player.sendMessage("Получение опыта возобновлено");
        			}
         			showHtm(player);
         			return true;
      			}

       			if (addcmd.startsWith("loot"))
      			{
         			int flag = Integer.parseInt(addcmd.substring(4).trim());
         			if (flag == 0)
        			{
         				player.setAutoLoot(false);
         				player.sendMessage("Автолут отключен!");
        			}
        			else
        			{
        				player.setAutoLoot(true);
        				player.sendMessage("Автолут включен!");
        			}
         			showHtm(player);
         			return true;
      			}
 
       			if (addcmd.startsWith("trade"))
      			{
         			int flag = Integer.parseInt(addcmd.substring(5).trim());
         			if (flag == 0)
        			{
         				player.setTradeRefusal(false);
         				player.sendMessage("Возможность использовать трейд включена");
        			}
        			else
        			{
        				player.setTradeRefusal(true);
        				player.sendMessage("Возможность использовать трейд отключена");
        			}
         			showHtm(player);
         			return true;
      			}
       			
       			if (addcmd.startsWith("prem"))
       			{
       				int flag = Integer.parseInt(addcmd.substring(4).trim());
       	            if (flag == 0)
       	            {
       	            	showPremHtm(player);
       	            }
       	         	else if (flag == 1)
       	         	{
       	         		if ((player.getInventory().getItemByItemId(Config.SET_PREMIUM_ITEM) == null) || (player.getInventory().getItemByItemId(Config.SET_PREMIUM_ITEM).getCount() < Config.SET_PREMIUM1_ITEM_COUNT))
						{
       	         			player.sendMessage("Не хватает предметов");
       	         			showPremHtm(player);
       	         			return false;
						}
       	         		if (player.getPremiumService() > 0)
       	         		{
       	         			player.sendMessage("У вас уже есть премиум, дождитесь его окончания");
       	         			return false;
       	         		}
						player.destroyItemByItemId("Consume", Config.SET_PREMIUM_ITEM, Config.SET_PREMIUM1_ITEM_COUNT, player, false);
						if (Config.PREMIUM_FIREWORKS) 
						{
							MagicSkillUse MSU = new MagicSkillUse(player, player, 2023, 1, 1, 0);
							player.sendPacket(MSU);
							player.broadcastPacket(MSU);
						}
						String acc = player.getAccountName();
						addPremiumServices(1, acc);
						player.broadcastUserInfo();
						showPremHtm(player);
						player.sendMessage("Вы получили премиум аккаунт на 1 день. Новое получение не добавляет время, а обновляет. Изменения вступят в силу после перезахода в игру !");
       	         	}
       	         	else if (flag == 2)
       	         	{
       	         		if ((player.getInventory().getItemByItemId(Config.SET_PREMIUM_ITEM) == null) || (player.getInventory().getItemByItemId(Config.SET_PREMIUM_ITEM).getCount() < Config.SET_PREMIUM2_ITEM_COUNT))
						{
       	         			player.sendMessage("Не хватает предметов");
       	         			showPremHtm(player);
       	         			return false;
						}
       	         		if (player.getPremiumService() > 0)
       	         		{
       	         			player.sendMessage("У вас уже есть премиум, дождитесь его окончания");
       	         			return false;
       	         		}
						player.destroyItemByItemId("Consume", Config.SET_PREMIUM_ITEM, Config.SET_PREMIUM2_ITEM_COUNT, player, false);
						if (Config.PREMIUM_FIREWORKS) 
						{
							MagicSkillUse MSU = new MagicSkillUse(player, player, 2023, 1, 1, 0);
							player.sendPacket(MSU);
							player.broadcastPacket(MSU);
						}
						String acc = player.getAccountName();
						addPremiumServices(2, acc);
						player.broadcastUserInfo();
						showPremHtm(player);
						player.sendMessage("Вы получили премиум аккаунт на 2 дня. Новое получение не добавляет время, а обновляет. Изменения вступят в силу после перезахода в игру !");
       	         	}
					else if (flag == 3)
       	         	{
       	         		if ((player.getInventory().getItemByItemId(Config.SET_PREMIUM_ITEM) == null) || (player.getInventory().getItemByItemId(Config.SET_PREMIUM_ITEM).getCount() < Config.SET_PREMIUM3_ITEM_COUNT))
						{
       	         			player.sendMessage("Не хватает предметов");
       	         			showPremHtm(player);
       	         			return false;
						}
       	         		if (player.getPremiumService() > 0)
       	         		{
       	         			player.sendMessage("У вас уже есть премиум, дождитесь его окончания");
       	         			return false;
       	         		}
						player.destroyItemByItemId("Consume", Config.SET_PREMIUM_ITEM, Config.SET_PREMIUM3_ITEM_COUNT, player, false);
						if (Config.PREMIUM_FIREWORKS)
						{
							MagicSkillUse MSU = new MagicSkillUse(player, player, 2023, 1, 1, 0);
							player.sendPacket(MSU);
							player.broadcastPacket(MSU);
						}
						String acc = player.getAccountName();
						addPremiumServices(7, acc);
						player.broadcastUserInfo();
						showPremHtm(player);
						player.sendMessage("Вы получили премиум аккаунт на 7 дней. Новое получение не добавляет время, а обновляет. Изменения вступят в силу после перезахода в игру !");
       	         	}
					else if (flag == 4)
       	         	{
       	         		if ((player.getInventory().getItemByItemId(Config.SET_PREMIUM_ITEM) == null) || (player.getInventory().getItemByItemId(Config.SET_PREMIUM_ITEM).getCount() < Config.SET_PREMIUM4_ITEM_COUNT))
						{
       	         			player.sendMessage("Не хватает предметов");
       	         			showPremHtm(player);
       	         			return false;
						}
       	         		if (player.getPremiumService() > 0)
       	         		{
       	         			player.sendMessage("У вас уже есть премиум, дождитесь его окончания");
       	         			return false;
       	         		}
						player.destroyItemByItemId("Consume", Config.SET_PREMIUM_ITEM, Config.SET_PREMIUM4_ITEM_COUNT, player, false);
						if (Config.PREMIUM_FIREWORKS) 
						{
							MagicSkillUse MSU = new MagicSkillUse(player, player, 2023, 1, 1, 0);
							player.sendPacket(MSU);
							player.broadcastPacket(MSU);
						}
						String acc = player.getAccountName();
						addPremiumServices(31, acc);
						player.broadcastUserInfo();
						showPremHtm(player);
						player.sendMessage("Вы получили премиум аккаунт на 1 месяц. Новое получение не добавляет время, а обновляет. Изменения вступят в силу после перезахода в игру !");
       	         	}
					else if (flag == 5)
       	         	{
       	         		if ((player.getInventory().getItemByItemId(Config.SET_PREMIUM_ITEM) == null) || (player.getInventory().getItemByItemId(Config.SET_PREMIUM_ITEM).getCount() < Config.SET_PREMIUM5_ITEM_COUNT))
						{
       	         			player.sendMessage("Не хватает предметов");
       	         			showPremHtm(player);
       	         			return false;
						}
       	         		if (player.getPremiumService() > 0)
       	         		{
       	         			player.sendMessage("У вас уже есть премиум, дождитесь его окончания");
       	         			return false;
       	         		}
						player.destroyItemByItemId("Consume", Config.SET_PREMIUM_ITEM, Config.SET_PREMIUM5_ITEM_COUNT, player, false);
						if (Config.PREMIUM_FIREWORKS) 
						{
							MagicSkillUse MSU = new MagicSkillUse(player, player, 2023, 1, 1, 0);
							player.sendPacket(MSU);
							player.broadcastPacket(MSU);
						}
						String acc = player.getAccountName();
						addPremiumServices(93, acc);
						player.broadcastUserInfo();
						showPremHtm(player);
						player.sendMessage("Вы получили премиум аккаунт на 3 месяца. Новое получение не добавляет время, а обновляет. Изменения вступят в силу после перезахода в игру !");
       	         	}
					else if (flag == 6)
       	         	{
       	         		if ((player.getInventory().getItemByItemId(Config.SET_PREMIUM_ITEM) == null) || (player.getInventory().getItemByItemId(Config.SET_PREMIUM_ITEM).getCount() < Config.SET_PREMIUM6_ITEM_COUNT))
						{
       	         			player.sendMessage("Не хватает предметов");
       	         			showPremHtm(player);
       	         			return false;
						}
       	         		if (player.getPremiumService() > 0)
       	         		{
       	         			player.sendMessage("У вас уже есть премиум, дождитесь его окончания");
       	         			return false;
       	         		}
						player.destroyItemByItemId("Consume", Config.SET_PREMIUM_ITEM, Config.SET_PREMIUM6_ITEM_COUNT, player, false);
						if (Config.PREMIUM_FIREWORKS) 
						{
							MagicSkillUse MSU = new MagicSkillUse(player, player, 2023, 1, 1, 0);
							player.sendPacket(MSU);
							player.broadcastPacket(MSU);
						}
						String acc = player.getAccountName();
						addPremiumServices(186, acc);
						player.broadcastUserInfo();
						showPremHtm(player);
						player.sendMessage("Вы получили премиум аккаунт на 6 месяцев. Новое получение не добавляет время, а обновляет. Изменения вступят в силу после перезахода в игру !");
       	         	}
       	            if (flag == 9)
       	            {
       	            	showHtm(player);
       	            }
       	         	return true;
       			}
       			
      			return false;
    		}
     		return true;
		}

  		private void showHtm(L2PcInstance activeChar)
  		{
     		NpcHtmlMessage htm = new NpcHtmlMessage(activeChar.getLastQuestNpcObject());
     		String text = HtmCache.getInstance().getHtm("data/html/mods/menu/menu.htm");
     		htm.setHtml(text);
     		activeChar.sendPacket(htm);
     		int CountTrick = L2World.getInstance().getAllPlayers().size() * Config.UP_ONLINE / 100;
     		int PLAYERS_ONLINE = L2World.getInstance().getAllPlayers().size() + CountTrick;
     		String online = str + PLAYERS_ONLINE;
     		htm.replace("%online%", online);
     		if (activeChar.getStopExp())
    		{
       			htm.replace("%gainexp%", "OFF");
    		}
    		else
    		{
       			htm.replace("%gainexp%", "ON");
    		}
     		if (activeChar.isAutoLoot())
    		{
       			htm.replace("%autoloot%", "ON");
    		}
    		else
    		{
       			htm.replace("%autoloot%", "OFF");
    		}
     		if (activeChar.getTradeRefusal())
    		{
       			htm.replace("%trade%", "OFF");
    		}
    		else
    		{
       			htm.replace("%trade%", "ON");
    		}
  		}
  		
  		private void showPremHtm(L2PcInstance player)
  		{
  			NpcHtmlMessage htm = new NpcHtmlMessage(player.getLastQuestNpcObject());
  			String text = HtmCache.getInstance().getHtm("data/html/mods/menu/menu-pa.htm");
  			htm.setHtml(text);
  			player.sendPacket(htm);
  			htm.replace("%price1%", str + Config.SET_PREMIUM1_ITEM_COUNT);
  			htm.replace("%price2%", str + Config.SET_PREMIUM2_ITEM_COUNT);
  			htm.replace("%price3%", str + Config.SET_PREMIUM3_ITEM_COUNT);
  			htm.replace("%price4%", str + Config.SET_PREMIUM4_ITEM_COUNT);
  			htm.replace("%price5%", str + Config.SET_PREMIUM5_ITEM_COUNT);
  			htm.replace("%price6%", str + Config.SET_PREMIUM6_ITEM_COUNT);
  		}
  		
  		private void addPremiumServices(int Days, String AccName)
  		{
  			try (Connection con = L2DatabaseFactory.getInstance().getConnection();
  			PreparedStatement statement = con.prepareStatement(UPDATE_PREMIUMSERVICE))
  			{
  				Calendar finishtime = Calendar.getInstance();
  				finishtime.setTimeInMillis(System.currentTimeMillis());
  				finishtime.set(Calendar.SECOND, 0);
  				finishtime.add(Calendar.DAY_OF_MONTH, Days);
  				
  				statement.setInt(1, 1);
  				statement.setLong(2, finishtime.getTimeInMillis());
  				statement.setString(3, AccName);
  				statement.execute();
  			}
  			catch (SQLException e)
  			{
  				_log.info("PremiumService:  Could not increase data");
  			}
  		}
  		public String[] getVoicedCommandList() 
  		{
     		return VOICED_COMMANDS;
  		}
	}